/*
 *Copyright © 2015 zhaorongbao
 *招融宝
 *http://zhaorongbao.com
 *All rights reserved.
 */
package com.hanhai.zrb.backend.common.model;

import java.util.List;

import org.apache.log4j.Logger;

/**
 * 分页查询Bean
 * 
 * @author fansunion@qq.com 2015年3月22日
 */
public class PageVo {
	private static Logger log = Logger.getLogger(PageVo.class);

	public static final Integer DEFAULT_PAGE_SIZE = 20;
	public static final Integer MAX_PAGE_SIZE = DEFAULT_PAGE_SIZE * 2;

	// 前端传入
	/** 第几页 */
	protected Integer pageNo = 1;
	/** 每页显示条数 */
	protected Integer pageSize = 10;

	// 计算得到
	/** 总记录数 */
	protected Integer totalCount = 0;
	/** 总共有多少页 */
	protected Integer totalPage = 0;

	/** 第1条记录的编号 */
	protected Integer startNo = 1;
	/** 最后1条记录的编号 */
	protected Integer endNo = 1;

	/** 表格中的数据 */
	protected List<?> rows;

	public PageVo() {

	}

	/**
	 * 检查pageSize的大小，如果大于最大值，显然是受到了“攻击”，调小有点。防止被攻击，比如把pageSize设置成10000，
	 * 每页就显示10000条数据，给数据库查询造成很大压力。
	 */
	public void check() {
		// 参数为null的情况，即前端有参数，但为nul
		if (pageSize == null) {
			pageSize = DEFAULT_PAGE_SIZE;
		}
		if (pageNo == null) {
			pageNo = 1;
		}
		// 大小范围检查
		pageSize = Math.abs(pageSize);
		pageNo = Math.abs(pageNo);
		if (pageSize > MAX_PAGE_SIZE) {
			log.error("pageSize is so big,pageSize=" + pageSize);
			pageSize = DEFAULT_PAGE_SIZE;
			pageNo = 1;
		}
		if (pageNo < 1) {
			log.error("pageNum is so small,pageNo=" + pageNo);
			pageNo = 1;
		}
		startNo = (pageNo - 1) * pageSize;
		endNo = startNo + pageSize;
	}

	public Integer getStartNo() {
		return startNo;
	}

	public void setStartNo(Integer startNo) {
		this.startNo = startNo;
	}

	public Integer getEndNo() {
		return endNo;
	}

	public void setEndNo(Integer endNo) {
		this.endNo = endNo;
	}

	public Integer getPageNo() {
		return pageNo;
	}

	public void setPageNo(Integer pageNo) {
		this.pageNo = pageNo;
	}

	public Integer getPageSize() {
		return pageSize;
	}

	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}

	public final Integer getTotalCount() {
		return totalCount;
	}

	public final void setTotalCount(Integer totalCount) {
		this.totalCount = totalCount;
	}

	public List<?> getRows() {
		return rows;
	}

	public void setRows(List<?> rows) {
		this.rows = rows;
	}

	public Integer getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(Integer totalPage) {
		this.totalPage = totalPage;
	}

	@Override
	public String toString() {
		return "PageVo [pageNo=" + pageNo + ", pageSize=" + pageSize
				+ ", totalCount=" + totalCount + ", totalPage=" + totalPage
				+ ", startNo=" + startNo + ", endNo=" + endNo + ", rows="
				+ rows + "]";
	}

}
